#include "equipa.h"
#include <iostream>

using std::cout;
using std::endl;

Equipa::Equipa(string coach, string nome_equipa) : treinador(coach), nomeEquipa(nome_equipa)
{
    plantel.reserve(10);

}

void Equipa::adicionarJogador(Jogador jogador)
{
    // TODO: Utilizar a class EquipaCheia como excepcao
    plantel.push_back(jogador);
}

bool Equipa::removerJogador(string nome)
{
    for (vector<Jogador>::iterator k = plantel.begin(); k != plantel.end(); k++) {
        if (k->getNome() == nome) {
            plantel.erase(k);
            return true;
        }
    }

    // Nao encontrou o jogador
    return false;
}

string Equipa::getTreinador()
{
    return treinador;
}

void Equipa::mudarTreinador(string nome)
{
    treinador = nome;
}

string Equipa::getNomeEquipa()
{
    return nomeEquipa;
}

void Equipa::imprimir()
{
    for (vector<Jogador>::size_type k = 0; k != plantel.size(); k++) {
        cout << plantel[k].getNome() << endl;
    }
}

bool Equipa::operator==(Equipa& Eq1)
{
    if (this->getNomeEquipa() != Eq1.getNomeEquipa())
        return false;
    if (this->getTreinador() != Eq1.getTreinador())
        return false;

    vector<Jogador> plantel_eq1 = Eq1.getPlantel();
    vector<Jogador> plantel_this = this->getPlantel();

    if (plantel_this.size() != plantel_eq1.size())
        return false;

    for (vector<Jogador>::size_type k = 0; k != plantel_this.size(); k++) {
        if (plantel_this[k].getNome() != plantel_eq1[k].getNome())
            return false;
        if (plantel_this[k].getIdade() != plantel_eq1[k].getIdade())
            return false;
    }

    return true;
}
